Bevezets a Visual Basic-be (VB 3.0-ra alapozva)
================================================
Msodik rsz
(Javtott I.)
Elssorban nem a szvegben javtottam, hanem a 3.0-ban ksztett foromokat szvegknt mentettem el, hogy fejlettebb verzikban is lehessen hasznlni ket!


Az elemek tulajdonsgai
-=-=-=-=-=-=-=-=-=-=-=-

Ismt kszntk minden VB-vel foglalkozt. Ebben a rszben sz lesz a klnfle elemekrl illetve azok hasznlatrl.

Mieltt kezdennk, ltalnossgban is tudni kell nhny dolgot. Az els rszbl kimaradt valami a tulajdonsgokrl. Az elemek tulajdonsgait nem csak a Properties ablakban tudod vltoztatni, hanem a kdablakban is, nmelyiket akr a program futs kzben. Nem tudom, hogy mi lett azzal a Hello, world! programmal, ha mg megvan, akkor azon keresztl mutatom meg amit akarok. Ha nincs meg, akkor csak kpzeld el.

Ha tbbszr nyomtad meg a HW gombot, akkor tbbszr is rta ki a megadott szveget. Mi lenne, ha egy kattints utn mr nem az lenne a gomb felirata, hogy Hello, world! hanem az, hogy "Ne nyomd meg mgegyszer!" (bocs a primitv pldrt, ms nem jutott eszembe)? Igen, szerintem is nagyszer lenne. Nos, akkor menjnk a Command1_Click eljrshoz, ahol mr megvan a print "Hello, world!" sor. Ezutn a sor utn rd mg be:

command1.caption = "Ne nyomd meg mgegyszer!"

Ebbl lthatod, hogy tulajdonsgokat meg lehet adni futs kzben is. Berhatnd akr azt is, hogy

command1.enabled = false

Ekkor "kiszrkl" a gomb, s nem tudod mgegyszer megnyomni. Teht akkor ltalnosan:

objektum.tulajdonsg = rtk

St, vannak olyanok tulajdonsgok is, amelyeket nem tudsz a Properties ablakban vltoztatni, csak gy, "kzileg".



Image, Drive List Box, Directory List Box, File List Box
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

Kszlben van a msodik VB-s programod. Ez egy kpnzeget program lesz, BMP-ket s ikonokat lehet majd megnzni vele. Azokra az elemekre lesz szksgnk, amelyeket a fejezetcmben mr lertam. Helyezd el az elemeket, nevezd el az ablakot "foablak"-nak, a felirata legyen "Kpnzeget", az Image-et pedig nevezd el "kep"-nek. Az Image s a Picture Box kzti klnbsg az, hogy az Image-et lehet nyjtani/zsugortani is. A tbbi elem maradhat az eredeti nevn (dir1, file1, drive1). Az ablak tulajdonsgait is vltoztasd meg egy picit: a BorderStyle legyen 3 (Fixed Double), gy nem lehet majd tmretezni.

Mg ne indtsd el a programot, mert elg res minden. Gondolkozzunk el, hogy mire is van szksgnk:
1. Ha vltoztatom a meghajtt (drive1), akkor vltozzon a mutatott knyvtr is
2. Ha vltozik a mutatott knyvtr, akkor vltozzanak a mutatott fjlok is
3. Ha egyszer rkattintunk egy BMP-re vagy ICO-ra, akkor azt jelentse meg az image1-en.

Akr kezdhetjk is. Az els pont megvalstsa:

1. Kattints dupln a Drive List Box-ra. Neknk a "Change" eljrsra van szksgnk, alapban ezt is kapjuk meg. rjuk be, hogy

dir1.path = drive1.drive

Ezzel rtk el azt, hogy megvltozzon a mutatott knyvtrak listja, ha meghajtt vltunk.

2. Menj a Directory List Box kdjhoz (dir1). Itt is a "Change"-re van szksgnk, itt is ezt kapjuk meg alapban, ezrt rd be, hogy

file1.path = dir1.path

gy ha tmegynk egy msik knyvtrba, akkor a msik knyvtr fjlait fogja mutatni a File List Box.

3. Menj a File List Box kdjhoz (file1). Vlaszd ki a duplakattints eljrst (Dblclick). Most egy kicsit bonyolultabb lesz, de azrt mg nem vszes.

Van egy olyan rtke a File List Box-nak, hogy "Path". Ez a kivlasztott fjl elrsi tvonalt hozza el. Pl. ha a C meghajt fknyvtrban van, akkor "C:\", ha a C meghajt VB alknyvtrban, akkor "C:\VB". Valamint van egy olyan rtke is, hogy "FileName", ez a kivlaszott fjl nevt, pl. "VB.ICO", vagy "KEP.BMP", stb. Ltszlag nem kell mst tennnk, csak egyms mell rakni a kt rtket, s meg is kaptuk a betltend fjl nevt. Azonban ez sajnos nem gy van. Nzzk csak meg!

Mondjuk a C:\VB alknyvtrban van egy ICON.ICO nev fjl. Ha egyms mell rakjuk ezt a kt rtket, akkor a kvetkez jn ki: "C:\VBICON.ICO", ami nem ppen megfelel. Nem baj, tegynk egy "\" jelet az elrsi tvonal utn. Ekkor ebben az esetben mr j lesz: "C:\VB\ICON.ICO"

De mi van, ha a fknyvtrban van? Akkor az elbbi eljrs alapjn ez fog kijnni: "C:\\ICON.ICO", ez sem szerencss. A megolds az, hogy megvizsgljuk az elrsi tvonal hosszt (a karakterlnc hosszt), s ha az nem hrom (nem "C:\", vagy "A:\", stb), akkor kell mg egy "\" jelet rakni az elrsi tvonal utn.

A vgeredmnyt egy fajlnev$ nev vltozban fogjuk trolni.

fajlnev$ = file1.path
if len(file1.path) <> 3 Then fajlnev$ = fajlnev$ + "\"
fajlnev$ = fajlnev$ + file1.filename

Az els sor vilgos: a fajlnev$ az elrsi tvonallal lesz egyenl, mivel arra mindenkpp szksgnk van. A msodik sor megnzi (a len fggvnnyel) az elrsi tvonal hosszt, s ha az nem hrom (teht nem a fknyvtrban van), akkor hozzad mg egy "\"-t. A harmadik sor pedig az eddigi stringhez (karakterlnchoz) - akr kellett hozzadni "\"-t, akr nem - hozzadja a fjlnevet.

Nincs ms htra, mint betlteni a kpet.

kep.picture = loadpicture(fajlnev$)

Mg egy kicsit lehetne cifrzni, pldul hogy a File List Box csak az ICO s a BMP fjlokat mutassa. A gyakorls kedvrt ne a Properties menbe rjuk ezt be, hanem a form betltdsekor adjuk ezt meg. Teht menj a form kdjhoz, s a load eljrsnl:

file1.pattern = "*.ico;*.bmp"

Csak gy a szrakozs kedvrt rd mg ezt is be (Form_Load-hoz):

kep.stretch = true

Ez azt jelenti, hogy akkorra nyjtja/zsugortja a kpet, amekkora az elem (az Image).

Indtsd el, s gynyrkdj benne...

Mit tudtl meg ebben a fejezetben?
 - A File List Box, Directory List Box, Drive List Box alapvet hasznlatt
 - Az Image hasznlatt, hogyan lehet futs kzben betlteni egy kpet
 - Hogyan lehet egyszerre tbb keressi kritriumot megadni (pattern - pontosvesszvel    elvlasztva)
 - Mire val a Stretch tulajdonsg.
 - Egy kis trkk az elrsi tvonal+fjlnv meghatrozsra
 - Hogyan lehet az ablakot tmretezhetetlenn tenni.
 - A Len fggvnyt megismerted (br ha mr programoztl korbban, akkor nem j)


Scroll Bar
-=-=-=-=-=

Miutn tltetted magad az els programod ltal okozott megrzkdtatsokon, mindjrt runk egy jat. Mentsd el a rgit, ha akarod. Ezttal egy sznkever programot runk. Bizonyra tudod, hogy hrom alapsznbl sokfle sznt ki lehet keverni. Ez a hrom alapszn: piros, zld, kk. Ehhez a programhoz szksgnk lesz hrom nylra (vzszitnes nylra), egy Picture Box-ra, meg hrom cimkre (Label). A cimkket arra hasznld, hogy a nyilak mell rd: melyik nyl melyik sznt kpviseli. A Picture Box httert lltsd fehrre (elg a Properties-nl), valamennyi nyl minimumrtke (Min) legyen 0, maximumrtke (Max) 255, az rtke (Value) pedig 255. Rendezd el ahogy akarod. A nyilak nevei piros, zold, kek, a Picture Box neve pedig Szin legyen.

Sznt egy RGB nev utastssal is meg lehet hatrozni, pl. RGB(255,255,255) az fehret ad, RGB(0,0,0) az fekett. Az rtkeknek 0 s 255 kztt kell lennik. Nincs ms dolgunk, csak mindig jra megadni a Szin Picture Box httert, ha vltozik a Scroll Bar-ok rtke. rd be minden Scroll Bar Change eljrshoz, hogy

Szin.BackColor = RGB(Piros.Value,Zold.Value,Kek.Value)

Ekkor a program mg nem egszen tkletes, ugyanis ha nem a nyl rszt hasznlod a Scroll Bar-nak, hanem "megfogod" azt a kis ngyzetet, akkor nem fog vltozni, csak amikor "leteszed", ezrt mg ugyanazt a sort be kell msolnod a nyilak "Scroll" nev eljrshoz is. gy mr tkletes lesz.

Mit tudtl meg ebben a fejezetben? 
 - A Scroll Bar-ok hasznlatt
 - Tudsz az RGB utasts ltezsrl is.


List Box, Text Box, Command Button, billentyk
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

Ez a program a List Box-ra lesz kilezve. A kvetkezt akarjuk megvalstani: ha berunk valamit egy szvegdobozba, akkor az ott megadott szveg megjelenik a List Box-ban. Lehet trlni az egsz  List Box tartalmt, vagy csak egy elemet.

Ehhez akkor kell neknk egy Text Box, legyen a neve "Bevitel", alapban ne legyen semmi belerva. Kell egy List Box is, mondjuk "Adatok" nvvel. Ezeken kvl hrom gomb: hozzads, trls, egsz lista trlse.

A List Box-okhoz, Combo Box-okhoz tartozik hrom csak rjuk jellemz parancs:
 - additem: listaelem hozzadsa
 - removeitem: elvesz egy listaelemet
 - clear: trli a listt
Teht ha j listaelemet akarunk hozzadni, akkor a Hozzads Command Button Click eljrshoz rjuk be:

adatok.additem bevitel.text

Egy kis ellenrzst is bele lehet rakni, pl. ha res a Text Box, akkor ne trtnjen semmi. Ekkor gy mdosul a fenti sor:

if bevitel.text <> "" then adatok.additem bevitel.text

Egy kis extraknt belerhatjuk, hogy ha mr egyszer hozzadta a listhoz, akkor legyen res a Text Box. Ugyanebbe az eljrsba:

bevitel.text = ""

Azt is meg lehetne oldani, hogy ne kelljen mindig a Hozzads gombra kattintgatni, hanem elg legyen csak az Enter-t megnyomni. Menj az ablak (form) load eljrsra, ott pedig rd be:

form1.keypreview = true

Most mr a program figyelni fogja a billentyzetet is. Most meg el kell kapnunk azt a pillanatot, amikor a felhasznl Enter-t nyom. Ez a bevitel Text Box Keypress eljrshoz tartozik. Itt egy kicsit mshogy nz ki az eljrs "feje":

Sub Bevitel_KeyPress (KeyAscii As Integer)

A KeyAscii rtk jelenti ebben az esetben a lenyomott gomb ASCII kdjt. Az ENTER kdja 13. Teht ha 13-mas az ASCII kd, akkor trtnjen ugyanaz, mintha a Hozzads gombot nyomtuk volna meg. Egy picit mdostjuk a dolgot:

if keyascii = 13 and bevitel.text <> "" then
 if bevitel.text <> "" then adatok.additem bevitel.text
 bevitel.text = ""
end if

Akkor mr ez is mkdik. Megcsinljuk az elem trlst. Azt az elemet kell trlnnk, ami ppen ki van vlasztva. Ezt a listindex fggvnnyel tudjuk lekrdezni. Az els listaelem a nulladik, a msodik listaelem az els, stb. Ha nincs semmi kivlasztva, akkor -1-gyel tr vissza. Tesznk akkor ide egy kis ellenrzst. A Trl gomb click eljrsnak eleje gy fog kinzni:

if adatok.listindex = -1 then exit sub

Meggyzdtnk rla, hogy valami ki van mr vlasztva. Akkor vegyk el!

adatok.removeitem (adatok.listindex)

Egyetlen dolog van vissza, de ez a legegyszerbb. A Trl mindent gomb click eljrshoz ennyit kell csak berni:

adatok.clear

Mit tudtl meg ebben a fejezetben?
 - List Box, Text Box alapvet hasznlata
 - Alapvet billentyzetkezels
 - Egy nagyon fontos utasts: exit sub (kilp az ppen fut eljrsbl/fggvnybl)
 


Azok az elemek, amik eddig kimaradtak
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

Mr elre ltom, hogy fogod a fejed a kvetkez pldn. Ugyanis ez az eddigi legszlssgesebb. Na, azrt vgjunk bele. A szituci a kvetkez: adott egy Text Box, ide be kell rni a jelszt. Mivel jelsz lesz benne, ezrt csak csillagokat lehet ltni benne, a bert szveget nem, s maximum 4 karaktert lehet belerni. A jelsz lehet: "vb" vagy "bv", az hogy pp melyik, kt Option Button-nal dntjk el. Van egy Check Box is, amit ha beikszelsz, akkor bekapcsol egy idztt. Ez a Timer kilp a programbl, ha tz msodpercig nem rod be a jelszt s nem nyomod meg az Ok gombot. J, mi?

Akkor kezdjk el kipakolni az elemeket. A Text Box neve legyen Jelszo, alapban ne legyen benne semmi szveg. A PasswordChar tulajdonsggal tudod belltani, hogy milyen karaktert mutasson (hogy msok ne olvashassk el). A MaxLength tulajdonsggal tudod belltani azt, hogy maximum hny karaktert fogadhat be (legyen ez 4). Szksg lesz egy Check Box-ra is, ennek a neve legyen idozito. Kell mg kt Option Button is, rd mell hogy melyik melyik jelszt kpviseli. Az elnevezs is trtnjen a jelszk alapjn (vb s bv). Az egyik Option Button legyen kivlasztva (Value tulajdonsg). Nem rtana elhelyezni egy Command Button-t is, Ok felirattal, s jhet a Timer. Ennek az Interval-ja legyen 10000 (ha mg emlkszel, akkor 1/1000 mp-ben mri az idt), s az Enabled tulajdonsg legyen False. A Timer-t mindegy hogy hova helyezed, futs kzben gyse ltszik.

Most jhet a kdols. Az Option Button-ok rtke lehet True vagy False, szmban kifejezve -1 s 0 (valami miatt -1 lett a True). Az Ok gomb megnyomsakor azt kell megvizsglni, hogy mit rt be a felhasznl, s mi van bejellve helyes jelszknt. Az egyik lehetsges megolds:

if jelszo.text = "vb" and vb.value = -1 then print "OK!"
if jelszo.text = "bv" and bv.value = -1 then print "OK!"

(Remlem mr nem kell mondanom, hogy ezt a Command1 elem Click eljrshoz kell rni)
A kvetkez lps a Check Box vizsglata. Aszerint, hogy be van-e kapcsolva vagy nincs, indtania kell a Timer-t. Az idozito elemnek is van egy click eljrsa: ez egy alkalmas hely arra, hogy megvizsgljuk a Check Box rtkt. Itt a vltozatossg kedvrt az 1 a beikszelt llapot. Ezek szerint gy fog alakulni a dolog:

timer1.enabled = false
if idozito.value = 1 then timer1.enabled = true

Ha letelik az id, akkor a Timer1 elem Timer eljrsa indul el. Ide rd be:

end

s mr ksz is van ez az elgg szrrealista kis program...



Itt a vge
-=-=-=-=-=

Itt a vge, de (remlhetleg) mg nem vgleg. Ahhoz hogy tovbbrjam, visszajelzsekre van szksgem. Elg nagy munka volt megrni ezt a kettt is, s ha nem tudom, hogy mennyire tetszik a nagykznsgnek, hogy mennyire kne ebben a stlusban tovbbrni, hogy mit kne vltoztatni... rted, ha tudom hogy sz*r, akkor inkbb nem rom tovbb (vagy nem ilyen formban). Teht minden pt jelleg kritikt szvesen fogadok a bkovi@freemail.hu cmre.






Ezt azt iromnyt Kvi Blint ksztette. Fellem azt csinlsz vele, amit akarsz, trhatod, de azrt emlts meg engem is, j? Frisstseket, folytatsokat mindig tallhatsz a Visual Basic znban: http://vbzona.fw.hu/